Several attempts have been made to create “execution environments” in which certain types of computer programs are executed. In general, a conventional execution environment provides support for basic features that many programs assume are available for use. For example, conventional execution environments typically include support for performing various mathematical functions (such as sine and cosine operations), input/output functions (such as reading and writing files), and communication functions (such as network and database access). Some conventional execution environments provide additional features, such as just-in-time compilation of code, machine independence and portability, remote operation, and enhanced internetworking. Conventional execution environments that support these additional features are generally referred to as “virtual machines.” The Common Language Infrastructure (CLI) by MICROSOFT CORPORATION and JAVA by SUN MICROSYSTEMS are examples of execution environments.
Conventional execution environments often support a large number of features that are available for use by programs being executed, and some of these features may be inappropriate for use in certain situations. For example, restricting user-level applications from using particular features may be helpful in complying with programming policies. These programming policies may establish guidelines to help ensure that programs do not perform undesirable operations, such as operations that can negatively impact overall system performance. However, other programs executed in the conventional execution environments, such as system-level applications, may require access to the complete range of features offered in the execution environments. This often makes it difficult to restrict the use of features in conventional execution environments.